\co Shared definitions for all DIY assembler macros
\co
\co
\co Register definitions
\co
\define DefineRegisters = {
r0	RN	0
r1	RN	1
r2	RN	2
r3	RN	3
r4	RN	4
r5	RN	5
r6	RN	6
r7	RN	7
r8	RN	8
r9	RN	9
r10	RN	10
r11	RN	11
r12	RN	12
}
\co
\co Function prototype
\co
\define DefineFunction(name) = {
	AREA	|$name$\$\$Code|, CODE, READONLY
	ALIGN	4
	EXPORT	|$name$|
	=	"$name$"
	ALIGN	4
|$name$|
}
\co
\co 26/32bit APCS
\co
\if defined APCS32
\co 32bit only
\define ReturnFromLR = {
	mov	pc, lr
}
\define PopAndReturn(regs) = {
	ldmia	sp!, \{$regs$, pc\}
}
\define PopAndReturn0 = {
	ldmia	sp!, \{pc\}
}
\endif
\if defined APCS26
\co 26bit only
\define ReturnFromLR = {
	movs	pc, lr
}
\define PopAndReturn(regs) = {
	ldmia	sp!, \{$regs$, pc\}^
}
\define PopAndReturn0 = {
	ldmia	sp!, \{pc\}^
}
\endif
\co Default: any architecture
\if !defined ReturnFromLR
\define ReturnFromLR = {
	teq	r0, r0
	teq	pc, pc
	moveq	pc, lr
	movs	pc, lr
}
\define PopAndReturn(regs) = {
	ldmia	sp!, \{$regs$, lr\}
ReturnFromLR
}
\define PopAndReturn0 = {
	ldmia	sp!, \{lr\}
ReturnFromLR
}
\endif
